﻿using DevExpress.XtraEditors;
using MDK.Device;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MDK.Winform
{
    public partial class frmIdentification : BaseForm
    {
        public TubeTypes[] _Types { get; set; }
        public frmIdentification()
        {
            InitializeComponent();
        }

        public frmIdentification(TubeTypes[] Types) : this()
        {
            pic.Image = App.BitMap;
            _Types = Types;
            GetComboboxData();
        }

        /// <summary>
        /// 根据角度旋转图标
        /// </summary>
        /// <param name="img"></param>
        public Image RotateImg(Image img, float angle)
        {
            //通过Png图片设置图片透明，修改旋转图片变黑问题。
            int width = img.Width;
            int height = img.Height;
            //角度
            Matrix mtrx = new Matrix();
            mtrx.RotateAt(angle, new PointF((width / 2), (height / 2)), MatrixOrder.Append);
            //得到旋转后的矩形
            GraphicsPath path = new GraphicsPath();
            path.AddRectangle(new RectangleF(0f, 0f, width, height));
            RectangleF rct = path.GetBounds(mtrx);
            //生成目标位图
            Bitmap devImage = new Bitmap((int)(rct.Width), (int)(rct.Height));
            Graphics g = Graphics.FromImage(devImage);
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            //计算偏移量
            Point Offset = new Point((int)(rct.Width - width) / 2, (int)(rct.Height - height) / 2);
            //构造图像显示区域：让图像的中心与窗口的中心点一致
            Rectangle rect = new Rectangle(Offset.X, Offset.Y, (int)width, (int)height);
            Point center = new Point((int)(rect.X + rect.Width / 2), (int)(rect.Y + rect.Height / 2));
            g.TranslateTransform(center.X, center.Y);
            g.RotateTransform(angle);
            //恢复图像在水平和垂直方向的平移
            g.TranslateTransform(-center.X, -center.Y);
            g.DrawImage(img, rect);
            //重至绘图的所有变换
            g.ResetTransform();
            g.Save();
            g.Dispose();
            path.Dispose();
            return devImage;
        }

        public void GetComboboxData()
        {
            for (int i = 0; i < 20; i++)
            {
                var type = _Types[i];
                var control = ((ComboBoxEdit)(this.Controls.Find("cmb" + (i+1), true)[0]));
                switch (type)
                {
                    case TubeTypes.Unknown:
                        control.SelectedIndex = 0;
                        break;
                    case TubeTypes.None:
                        control.SelectedIndex = 1;
                        break;
                    case TubeTypes.Meimian:
                        control.SelectedIndex = 2;
                        break;
                    case TubeTypes.Hesuan:
                        control.SelectedIndex = 3;
                        break;
                }
            }
        }

        private void cmb_SelectedIndexChanged(object sender, EventArgs e)
        {
            var control = (sender as ComboBoxEdit);
            var controlname = control.Name;
            int pos = 0;
            int.TryParse(controlname.Substring(3, controlname.Length - 3), out pos);
            switch (control.SelectedIndex)
            {
                case 1:
                    _Types[pos - 1] = TubeTypes.None;
                    break;
                case 2:
                    _Types[pos - 1] = TubeTypes.Meimian;
                    break;
                case 3:
                    _Types[pos - 1] = TubeTypes.Hesuan;
                    break;
            }
        }

        private void frmIdentification_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (FastMessageBox.Question("确认试管已经核实完毕") == DialogResult.OK)
            {
                bool isSuccess = true;
                for (int i = 0; i < 20; i++)
                {
                    var control = ((ComboBoxEdit)(this.Controls.Find("cmb" + (i + 1), true)[0]));

                    if (control.SelectedIndex == 0)
                    {
                        isSuccess = false;
                    }
                }
                if (isSuccess)
                {
                    DialogResult = DialogResult.Cancel;
                    e.Cancel = false;
                }
                else
                {
                    FastMessageBox.Error("识别中还存在未知的试管,请确认后关闭");
                    e.Cancel = true;
                }
            }
        }
    }
}
